from flask_records.decorators import query_by_page, query
from common.utils import custom_marshal_pagination

GET_BY_PAGE_SQL = """
select * from storage_record
where (warehouse_id = :warehouse_id or :warehouse_id is null)
    and (sku_id = :sku_id or :sku_id is null)
    and (unit_id = :unit_id or :unit_id is null)
"""


def get_by_page(page, page_size, sorted_by, sorted_by_type, search_str, **kwargs):
    sql = GET_BY_PAGE_SQL
    order_by_sql = "{} ORDER BY {} {}".format(sql, sorted_by, sorted_by_type)

    if search_str:
        # 以空格分割，搜索所有包含的
        search_str_re = '%{}%'.format('%'.join(search_str.split(" ")))
    else:
        search_str_re = None

    @query_by_page(order_by_sql, page_size=page_size)
    def _get_by_pagination(
            page, search_str_re, warehouse_id, sku_id, unit_id, **kwargs):
        pass

    pagination = _get_by_pagination(
        page, search_str_re, **kwargs
    )
    pagination = custom_marshal_pagination(pagination)
    return pagination
